//Hakko revenge #include "msp430G2553.h" #include "math.h" //============ Define preset values here #define firmware_version 2.2 #define solder_temp 310 // Up temp #define stand_by_temp 0 // Low temp #define max_set_temp 410 //#define pwm_period 8000000 // PWM Period calculation example 700*(1/16,000,000) = 43.75us / 22.857 KHz //=========== Define general values here #define EN_heater BIT0 #define Clear 0x00 #define D4 BIT2 // LCD bits definition #define D5 BIT3 #define D6 BIT4 #define D7 BIT5 #define RS BIT0 #define EN BIT1 int array_div_mod[4]; const unsigned char array_special_char[80] = {RS,RS,RS,D4+RS,RS,D5+D4+RS,RS,D6+D5+D4+RS,RS,D5+D4+RS,RS,D6+D4+RS,RS,RS+D7,RS+D4,RS, D4+RS,RS+D6+D7,D4+RS,D7+RS+D5,D4+RS,D4+RS+D7,D4+RS,D4+RS,RS,D4+RS,RS,RS,RS,RS,RS,RS, RS,RS+D6,RS,D7+RS+D6,RS+D4,D5+RS+D7+D6,RS,D7+D6+D4+RS,RS,D6+D4+RS,RS+D4,RS+D4,RS+D4,RS+D7+D4,RS,RS+D7+D6+D5, RS,RS+D6,RS,D5+RS+D6,RS,D5+RS+D7+D6+D4,RS+D4,D6+D5+RS,RS+D4,D6+RS,RS+D4,RS+D4,RS,RS+D7+D4+D5,RS,RS+D6+D5, RS,RS+D6,RS+D4,D5+RS+D6+D7+D4,RS,D5+RS+D7+D6,RS,D6+RS,RS,RS,RS,RS+D7+D6+D5,RS,RS+D7+D5,RS+D4,RS+D6+D5+D4}; long IntVolt,IntCur,IntBtemp,IntTtemp; int temp2,i,n,delay,tenthsc,unitsc,decimal1c,decimal2c,tenthsv,unitsv,decimal1v,decimal2v,menu; int tenthsbt,unitsbt,decimal1bt,decimal2bt,tenthstt,unitstt,decimal1tt,decimal2tt; int menumem,menu_ps,buton,rotE,beep_l,beep_f,PWM_test,temp_preset; float med1,med2,med3,med4,med5,med6,med7,med8,med9,med10,med1c,med2c,med3c,med4c,med5c; float med1bt,med2bt,med3bt,med4bt,med5bt,med1tt,med2tt,med3tt,med4tt,med5tt,m; float btemp_val_c,ttemp_val_c,volt_val_c,cur_val_c,volt_val,cur_val,ref_temp_val,btemp_val,ttemp_val; int data1,data2,data3; float convert_volt(float); float convert_cur(float); float convert_btemp(float); float convert_ttemp(float); float bucla_div_mod(float); void move_cursor_xy(int,int); void configure_lcd(int); void display_char(unsigned char); void write_flash_data(int); void read_flash_data(int); int debouncing_la_actionare_rotire(int); int debouncing_la_revenire_rotire(int); int debouncing_but(int); int delay_time(int); int delay_long(int); int create_custom_char(int); int strobe_data_p2(int); int cls(int); int draw_Logo(int); int draw_main_menu_screen(int); int draw_solder_screen(int); int draw_time_hot_screen(int); int draw_sound_screen(int); int draw_low_temp_screen(int); int draw_hi_temp_screen(int); int draw_sub_solder(int); int draw_sub_solder_mm(int); int draw_sub_solder_ret(int); int beep_lf(int,int); void main(void){ WDTCTL = WDTPW + WDTHOLD; // disable watch dog timer DCOCTL = CALDCO_16MHZ; // set internal oscillator at 16MHz BCSCTL1 = CALBC1_16MHZ; // set internal oscillator at 16MHz P1DIR = 0x83; // 1000 0011 P2DIR = 0xFF; // 1111 1111 P3DIR = 0xF8; // 1111 1000 P1OUT = Clear; P2OUT = Clear; P3OUT = Clear; //--------------------config ADC ADC10CTL1 |= INCH_2; //continuous sample mode, CH2 // CONSEQ1 + INCH_2 ADC10CTL0 |= ADC10SHT_2 + ADC10ON + MSC; //sample and hold time, adc on, cont. sample ADC10AE0 |= 0x04; // select channel A2 ADC10CTL0 |= ADC10SC + ENC; // start conversions //--------------------config PWM //P1SEL |= BIT1; // P1.1 Select as TA0 output //TA0CCR0 = 500000; //TA0CCTL1 = OUTMOD_7; // TA0CCR1 reset/set output mode //TA0CCR1 = 250000; // TA0CCR1 PWM duty cycle //TA0CTL = TASSEL_2 + MC_1; // SMCLK, up mode read_flash_data(0); temp_preset = data1; //data2 = 410; //temp_preset = solder_temp; menu = 1; configure_lcd(0); draw_Logo(0); beep_lf(100,1000); beep_lf(100,1200); beep_lf(100,1500); beep_lf(100,1800); for(;;) { do{ //============================================================ select menu loop ================ if (menu == 0){ draw_main_menu_screen(0); } if (menu == 1){ draw_solder_screen(0); } if (menu == 2){ draw_hi_temp_screen(0); } if (menu == 3){ draw_low_temp_screen(0); } if (menu == 4){ draw_time_hot_screen(0); } if (menu == 5){ draw_sound_screen(0); } rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 4) and (menu < 5)){ menu = menu+1; beep_lf(100,1000); } if((rotE == 2) and (menu > 1)){ menu = menu-1; beep_lf(100,1000); } rotE = debouncing_la_revenire_rotire(rotE); temp2 = P3IN; buton = (temp2 &= 0x01); }while ( buton != 0 ); //========================================== select menu loop END ================ buton = debouncing_but(buton); menumem = menu; if(menu == 1){ //=========================================== Solder menu 1 ========================= draw_sub_solder(0); do{ if(PWM_test == 0){ PWM_test = 1; n = 25; } else{ PWM_test = 0; n = 10; } //----------------------------------- temp regulating loop do{ //-------------------------------------------------read board temp ADC10CTL1 &= ~(INCH_2); //disable continuous sample mode, CH2 ADC10CTL1 |= INCH_5; //continuous sample mode, CH5 ADC10AE0 |= 0x20; // select channel A5 //0010 0000 ADC10CTL0 |= ADC10SC + ENC; // start conversions delay_time(50); IntBtemp = ADC10MEM; ADC10CTL0 &= ~(ADC10SC + ENC); // stop conversions //-------------------------------------------------read tip temp ADC10CTL1 &= ~(INCH_5); //disable continuous sample mode, CH5 ADC10CTL1 |= INCH_4; //continuous sample mode, CH4 ADC10AE0 |= 0x10; // select channel A4 //0001 0000 ADC10CTL0 |= ADC10SC + ENC; // start conversions delay_time(50); IntTtemp = ADC10MEM; ADC10CTL0 &= ~(ADC10SC + ENC); // stop conversions //-------------------------------------------------read current ADC10CTL1 &= ~(INCH_4); //disable continuous sample mode, CH4 ADC10CTL1 |= INCH_3; //continuous sample mode, CH3 ADC10AE0 |= 0x08; // select channel A3 //0000 1000 ADC10CTL0 |= ADC10SC + ENC; // start conversions delay_time(50); IntCur = ADC10MEM; ADC10CTL0 &= ~(ADC10SC + ENC); // stop conversions //-------------------------------------------------read voltage ADC10CTL1 &= ~(INCH_3); //disable continuous sample mode, CH3 ADC10CTL1 |= INCH_2; //continuous sample mode, CH2 ADC10AE0 |= 0x04; // select channel A2 //0000 0100 ADC10CTL0 |= ADC10SC + ENC; // start conversions delay_time(50); IntVolt = ADC10MEM; ADC10CTL0 &= ~(ADC10SC + ENC); // stop conversions volt_val_c = convert_volt (IntVolt); cur_val_c = convert_cur (IntCur); btemp_val_c = convert_btemp (IntBtemp); if(PWM_test == 0){ ttemp_val_c = convert_ttemp (IntTtemp); } //---------------------------------------------- average voltage if (IntVolt > 0x00){ med1 = med2; med2 = med3; med3 = med4; med4 = med5; med5 = med6; med6 = med7; med7 = med8; med8 = med9; med9 = med10; med10 = volt_val_c; } volt_val = ((med1+med2+med3+med4+med5+med6+med7+med8+med9+med10) / 10); //--------------------------------------------- average current if (IntCur > 0x00){ med1c = med2c; med2c = med3c; med3c = med4c; med4c = med5c; med5c = cur_val_c; } cur_val = ((med1c+med2c+med3c+med4c+med5c)/5); //--------------------------------------------- average board temp if (IntBtemp > 0x00){ med1bt = med2bt; med2bt = med3bt; med3bt = med4bt; med4bt = med5bt; med5bt = btemp_val_c; } btemp_val = ((med1bt+med2bt+med3bt+med4bt+med5bt)/5); //--------------------------------------------- average tip temp if (IntTtemp > 0x00){ med1tt = med2tt; med2tt = med3tt; med3tt = med4tt; med4tt = med5tt; med5tt = ttemp_val_c; } ttemp_val = ((med1tt+med2tt+med3tt+med4tt+med5tt)/5); //--------------------------------------------------------- adjusting temp acording to feedback if((ttemp_val < (temp_preset/10))and(PWM_test == 1)){ P1OUT |= EN_heater; // Enable heater = 1 move_cursor_xy(8,1); display_char('+'); move_cursor_xy(9,2); } else{ P1OUT &= ~(EN_heater); // Heater = 0 move_cursor_xy(8,1); display_char(' '); move_cursor_xy(9,2); } n--; }while (n != 0); //----------------------------- Loop for div/mod Voltage Values bucla_div_mod(volt_val); tenthsv = array_div_mod[0]; unitsv = array_div_mod[1]; decimal1v = array_div_mod[2]; decimal2v = array_div_mod[3]; //------------------------------ Loop for div/mod Current Values bucla_div_mod(cur_val); tenthsc = array_div_mod[0]; unitsc = array_div_mod[1]; decimal1c = array_div_mod[2]; decimal2c = array_div_mod[3]; //----------------------------- Loop for div/mod Board temp Values bucla_div_mod(btemp_val); tenthsbt = array_div_mod[0]; unitsbt = array_div_mod[1]; decimal1bt = array_div_mod[2]; decimal2bt = array_div_mod[3]; //------------------------------ Loop for div/mod Tip temp values Values bucla_div_mod(ttemp_val); tenthstt = array_div_mod[0]; unitstt = array_div_mod[1]; decimal1tt = array_div_mod[2]; decimal2tt = array_div_mod[3]; //------------------------------------------ display values move_cursor_xy(3,1); display_char(tenthstt + 0x30); display_char(unitstt + 0x30); display_char(decimal1tt + 0x30); move_cursor_xy(3,2); display_char(tenthsbt + 0x30); display_char(unitsbt + 0x30); display_char('.'); display_char(decimal1bt + 0x30); move_cursor_xy(9,2); // ------------------------ submenu loop - temp2 = P3IN; buton = (temp2 &= 0x01); if (buton == 0){ P1OUT &= ~(EN_heater); // Heater = 0 move_cursor_xy(8,1); display_char(' '); move_cursor_xy(9,2); menu_ps = 1; draw_sub_solder_mm(0); beep_lf(100,1000); buton = debouncing_but(buton); do{ rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 4) and (menu_ps < 2)){ menu_ps = menu_ps+1; beep_lf(100,1000); } if((rotE == 2) and (menu_ps > 1)){ menu_ps = menu_ps-1; beep_lf(100,1000); } rotE = debouncing_la_revenire_rotire(rotE); if (menu_ps == 1){ draw_sub_solder_mm(0); } if (menu_ps == 2){ draw_sub_solder_ret(0); } temp2 = P3IN; buton = (temp2 &= 0x01); }while(buton != 0); } if((menu_ps == 2)and(buton == 0)){ //----------------submenu Return buton = debouncing_but(buton); beep_lf(100,1000); menu = menumem; draw_sub_solder(0); } if((menu_ps == 1)and(buton == 0)){ //--------submenu Return to main menu buton = debouncing_but(buton); beep_lf(100,1000); menu = 0; } }while ( menu == menumem ) ; } // ==================================================================== Solder menu 1 END ========== if(menu == 2){ //=============================================== Hi temp menu 2 ============= cls(2); do{ m = temp_preset; m = m/10; bucla_div_mod(m); move_cursor_xy(3,2); display_char(array_div_mod[0] + 0x30); display_char(array_div_mod[1] + 0x30); display_char(array_div_mod[2] + 0x30); move_cursor_xy(9,2); rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 4) and (temp_preset < max_set_temp)){ temp_preset = temp_preset+5; beep_lf(100,1000); } if((rotE == 2) and (temp_preset > stand_by_temp)){ temp_preset = temp_preset-5; beep_lf(100,1000); } rotE = debouncing_la_revenire_rotire(rotE); temp2 = P3IN; buton = (temp2 &= 0x01); }while ( buton != 0 ) ; beep_lf(100,1000); data1 = temp_preset; write_flash_data(0); buton = debouncing_but(buton); } //=============================================== Hi temp menu 2 END ============= } } //---------------------------------------------------------------------------------------------------------------------------------- //----------------- PROCEDURES ----------- PROCEDURES ----------- PROCEDURES ----------- PROCEDURES ----------- PROCEDURES ---- //---------------------------------------------------------------------------------------------------------------------------------- int delay_time (int delay){ //----------------------------------------- Delay--------------------- do delay--; while (delay != 0); return (int)(delay); } int delay_long (int){ //--------------------------------------- long Delay ------------------ int j; j = 200; do{ delay_time(5000); j--; }while (j != 0); return (int)(delay); } float convert_volt (float IntVolt){ // ------------------------Voltage conversion float voltage,ua2,raport_divizor,r2,r1; r1 = 10010; r2 = 1000; ua2 = (3.33/1024*IntVolt); raport_divizor = ((r1+r2)/r2); voltage = (ua2*raport_divizor); return (float)(voltage); } float convert_cur (float IntCur){ // ------------------------Current conversion float current,Usunt,factor_op_amp,r2_op,r1_op,rs; r1_op = 1000; r2_op = 10000; rs = 0.020; factor_op_amp = (1+(r2_op/r1_op)); Usunt = ((3.33/1024*IntCur)/factor_op_amp); current = ((Usunt/rs)-0.03); if (current < 0.05) { current = 0; } return (float)(current); } float convert_btemp (float IntBtemp){ // ------------------------Board temp conversion float temperature,Ua1,r1_tb,r2_tb,t2k,rdiv; rdiv = 10500; r1_tb = 9900; Ua1 = (3.3/1024*IntBtemp); r2_tb = (3.3*rdiv/Ua1-rdiv); //r2 = vcc*rdiv/uADCin -rdiv if (r2_tb == r1_tb ){ r2_tb = r2_tb+1;} // prevents log(1) t2k= ( (298.16*3380)/log(r1_tb/r2_tb) ) / (3380/log(r1_tb/r2_tb)-298.16); //T2= T1*B/ln(R1/R2) / ( B/ln(R1/R2) - T1 ) in Kelvin temperature = t2k - 273.16 ; return (float)(temperature); } float convert_ttemp (float IntTtemp){ // ------------------------Tip temp conversion float Ttemp,r1_opt,r2_opt,factor_op_temp,Ut_2; r1_opt = 500; r2_opt = 47000; factor_op_temp = (1+(r2_opt/r1_opt)); Ut_2 = ((3.33/1024)*IntTtemp); Ttemp = (((Ut_2/factor_op_temp)/0.000021)/10); // N type thermocouple has 32 uV/'C @ 370'C. At 330, the tip has 325 and at 410'C, the tip has 415 //Ttemp = (Ut_2/factor_op_temp); return (float)(Ttemp); } int debouncing_but (int){ //----------------------debouncing for sw release delay_time(500); do{ temp2 = P3IN; buton = (temp2 &= 0x01); }while (buton == 0); return(int)( buton ); } int debouncing_la_actionare_rotire(int rotE){ //------------debouncing for encoder rotation begin delay_time(500); do { temp2 = P3IN; rotE = (temp2 &= (BIT1 + BIT2)); temp2 = P3IN; buton = (temp2 &= 0x01); }while ((rotE == 6) and (buton != 0)); return (int)(rotE); } int debouncing_la_revenire_rotire(int rotE){ //-------debouncing for encoder rotation end delay_time(500); do { temp2 = P3IN; rotE = (temp2 &= (BIT1 + BIT2)); temp2 = P3IN; buton = (temp2 &= 0x01); }while ((rotE != 6) and (buton != 0)); return (int)(rotE); } void write_flash_data(int){ int *Flash_ptr; // Flash pointer Flash_ptr = (int *) 0x100F; // Initialize Flash pointer __disable_interrupt(); while(BUSY & FCTL3); // Check if Flash being used FCTL2 = FWKEY + FSSEL_1 + FN3; // Clk = SMCLK/4 FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY + ERASE; // Set Erase bit *Flash_ptr = 0x00; // Dummy write to erase Flash segment while(BUSY & FCTL3); // Check if Flash being used // FCTL1 = FWKEY; // Clear WRT bit // FCTL3 = FWKEY + LOCK; // Set LOCK bit FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY + WRT; // Set WRT bit for write operation *Flash_ptr++ = data1; // Write value to flash *Flash_ptr++ = data2; // Write value to flash *Flash_ptr++ = data3; // Write value to flash FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit __enable_interrupt(); } void read_flash_data(int){ int *Flash_ptrC; // Segment C pointer Flash_ptrC = (int *) 0x100F; // Initialize Flash segment C pointer data1 = *Flash_ptrC; // value stored in Flash_ptrC data2 = *Flash_ptrC++; // value stored in Flash_ptrC data3 = *Flash_ptrC++; // value stored in Flash_ptrC } void configure_lcd(int){ //-----------------------------LCD-SET-AND-CONFIGURE--------------------------------------- int rep_n; rep_n = 3; do{ strobe_data_p2(D5+D4); // comand xxxxx 110000 x3 means >> 8bit, 2lines, 5x8pixel char rep_n--; }while (rep_n != 0); rep_n = 2; do{ // comand xxxxx 100000 x1 means >> 8bit, 2lines, 5x8pixel char strobe_data_p2(D5); // comand xxxxxxxxxxxxxxx means >> move right/ shift off rep_n--; }while (rep_n != 0); strobe_data_p2(D7); // comand xxxxxxxxxxxxxxx means >> move right/ shift off strobe_data_p2(0x00); // comand xxxxxxxxxxxxxxx means >> move right/ shift off strobe_data_p2(D7+D6); // comand xxxxxxxxxxxxxxxx means >> move right/ shift off strobe_data_p2(0x00); // comand xxxxxxxxxxxxxxxx means >> display/ cursor/ blinking strobe_data_p2(D7+D6+D5+D4); // comand xxxxxxxxxxxxxxx means >> display/ cursor/ blinking rep_n = 2; do{ strobe_data_p2(0x00); // comand xxxxxxxxxxxxxx means >> 8bit, 2lines, 5x8pixel char strobe_data_p2(D4); // comand xxxxxxxxxxxxxx means >> 8bit, 2lines, 5x8pixel char rep_n--; }while (rep_n != 0); create_custom_char(0); } float bucla_div_mod(float ref_temp_val){ //------------------------------ Loop for div/mod ------------ int tenths,units,decimal1,decimal2; tenths = 0; units = 0; decimal1 = 0; decimal2 = 0; i = 27; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; tenths = tenths + 1; } i--; }while (i != 0); i = 10; ref_temp_val = ref_temp_val*10; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; units = units + 1; } i--; }while (i != 0); i = 10; ref_temp_val = ref_temp_val*10; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; decimal1 = decimal1 + 1; } i--; }while (i != 0); i = 10; ref_temp_val = ref_temp_val*10; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; decimal2 = decimal2 + 1; } i--; }while (i != 0); array_div_mod[0] = tenths; array_div_mod[1] = units; array_div_mod[2] = decimal1; array_div_mod[3] = decimal2; return (int)(array_div_mod); } void move_cursor_xy (int x,int y){ // ---------------------------- Display procedure------------ char adress,temp; x = x - 1; y = y - 1; adress = (128 + x + (64 * y)); //internal map correction temp = adress; P2OUT = Clear ; // R/W = 0 (write mode) RS = 0 (address) delay_time(500); adress = adress >> 4; adress = adress << 2; strobe_data_p2(adress); adress = temp; adress &= 0x0F; adress = adress << 2; strobe_data_p2(adress); } void display_char(unsigned char ch){ //------------- Display char------------------------ char temp; temp = ch; P2OUT = RS ; // R/W = 0 (write mode) RS = 1 (data) ch = ch >> 4; ch = ch << 2; strobe_data_p2(RS+ch); ch = temp; ch &= 0x0F; ch = ch << 2; strobe_data_p2(RS+ch); } int create_custom_char(int){ // --------------------------------------- create custom char----------- strobe_data_p2(D6); strobe_data_p2(0x00); // comand xxxxxxxxx means >> 0x40 comand set CGRAM adress to 0 /* //solder half1 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D4+RS); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS); strobe_data_p2(D5+D4+RS); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D6+D5+D4+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(D5+D4+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS); strobe_data_p2(D6+D4+RS); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS+D7); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS+D4); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte7 //solder half2 strobe_data_p2(D4+RS); strobe_data_p2(RS+D6+D7); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(D4+RS); strobe_data_p2(D7+RS+D5); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(D4+RS); strobe_data_p2(D4+RS+D7); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(D4+RS); strobe_data_p2(D4+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(D4+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte7 //left arrow strobe_data_p2(RS); strobe_data_p2(RS+D6); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D7+RS+D6); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS+D4); strobe_data_p2(D5+RS+D7+D6); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D7+D6+D4+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(D6+D4+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS+D4); strobe_data_p2(RS+D4); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS+D4); strobe_data_p2(RS+D7+D4); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS); strobe_data_p2(RS+D7+D6+D5); // comand xxxxxxxx means >> send special character data byte7 //right arrow strobe_data_p2(RS); strobe_data_p2(RS+D6); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D5+RS+D6); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS); strobe_data_p2(D5+RS+D7+D6+D4); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS+D4); strobe_data_p2(D6+D5+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS+D4); strobe_data_p2(D6+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS+D4); strobe_data_p2(RS+D4); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS+D7+D4+D5); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS); strobe_data_p2(RS+D6+D5); // comand xxxxxxxx means >> send special character data byte7 //button symbol strobe_data_p2(RS); strobe_data_p2(RS+D6); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS+D4); strobe_data_p2(D5+RS+D6+D7+D4); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS); strobe_data_p2(D5+RS+D7+D6); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D6+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS); strobe_data_p2(RS+D7+D6+D5); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS+D7+D5); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS+D4); strobe_data_p2(RS+D6+D5+D4); // comand xxxxxxxx means >> send special character data byte7 */ for(i=0; i<80; i++){ strobe_data_p2(array_special_char[i]); } return(0); } int strobe_data_p2(int strobe){ // -------------------------- strobe data to display------------- P2OUT = (strobe); // data sent from comand delay_time(2000); P2OUT |= EN; // Enable = 1 delay_time(2000); P2OUT &= ~(EN); // Enable = 0 delay_time(2000); return(0); } int cls(int i){ // -------------------------- Clear seective screen areas------------- //0 means the entire screen, 1 means first row only and 2 means 2nd row only if((i == 0) or (i == 1)){ i = 16; move_cursor_xy(1,1); do{ display_char(' '); i--; }while (i != 0); } if((i == 0) or (i == 2)){ i = 16; move_cursor_xy(1,2); do{ display_char(' '); i--; }while (i != 0); } return(0); } int draw_Logo(int){ // -------------------- Logo intro------------- int count_m; cls(0); move_cursor_xy(2,1); display_char('H'); display_char('a'); display_char('k'); display_char('k'); display_char('o'); move_cursor_xy(1,2); display_char('R'); display_char('e'); display_char('v'); display_char('e'); display_char('n'); display_char('g'); display_char('e'); move_cursor_xy(9,2); count_m = 6; do{ delay_long(0); count_m --; }while(count_m !=0); cls(0); move_cursor_xy(2,1); display_char('M'); display_char('a'); display_char('r'); display_char('i'); display_char('u'); display_char('s'); move_cursor_xy(2,2); display_char('T'); display_char('a'); display_char('c'); display_char('i'); display_char('u'); display_char('c'); move_cursor_xy(9,2); count_m = 6; do{ delay_long(0); count_m --; }while(count_m !=0); return(0); } int draw_main_menu_screen(int){ // --------------------------draw main menu------------- cls(0); move_cursor_xy(3,1); display_char('M'); display_char('a'); display_char('i'); display_char('n'); move_cursor_xy(1,2); display_char(0x00); display_char(0x01); move_cursor_xy(8,2); display_char(0x03); return(0); } int draw_solder_screen(int){ // -----------------draw the solder menu------------- cls(0); move_cursor_xy(2,1); display_char('S'); display_char('o'); display_char('l'); display_char('d'); display_char('e'); display_char('r'); move_cursor_xy(1,2); display_char(0x00); display_char(0x01); move_cursor_xy(5,2); display_char(0x04); move_cursor_xy(8,2); display_char(0x03); return(0); } int draw_low_temp_screen(int){ // --------------draw stand by temperature adjust menu------------- cls(0); move_cursor_xy(1,1); display_char('L'); display_char('o'); display_char('w'); display_char(' '); display_char('t'); display_char('e'); display_char('m'); display_char('p'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(4,2); display_char(0x04); move_cursor_xy(8,2); display_char(0x03); return(0); } int draw_hi_temp_screen(int){ // --------------draw stand by temperature adjust menu------------- cls(0); move_cursor_xy(1,1); display_char('U'); display_char('p'); display_char(' '); display_char('t'); display_char('e'); display_char('m'); display_char('p'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(4,2); display_char(0x04); move_cursor_xy(8,2); display_char(0x03); return(0); } int draw_time_hot_screen(int){ //-----------draw adjusting time before entering stand by menu------------- cls(0); move_cursor_xy(1,1); display_char('T'); display_char('i'); display_char('m'); display_char('e'); display_char(' '); display_char('h'); display_char('o'); display_char('t'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(4,2); display_char(0x04); move_cursor_xy(8,2); display_char(0x03); return(0); } int draw_sound_screen(int){ // -------------------draw sound menu------------- cls(0); move_cursor_xy(2,1); display_char('S'); display_char('o'); display_char('u'); display_char('n'); display_char('d'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(4,2); display_char(0x04); move_cursor_xy(9,2); return(0); } int draw_sub_solder(int){ cls(0); move_cursor_xy(1,1); display_char('T'); display_char('='); move_cursor_xy(6,1); display_char(0xDF); display_char('C'); move_cursor_xy(1,2); display_char('P'); display_char('='); move_cursor_xy(8,2); display_char('W'); return(0); } int draw_sub_solder_mm(int){ cls(2); move_cursor_xy(1,2); display_char('M'); display_char('a'); display_char('i'); display_char('n'); move_cursor_xy(6,2); display_char(0x04); display_char(' '); display_char(0x03); move_cursor_xy(9,2); return(0); } int draw_sub_solder_ret(int){ cls(2); move_cursor_xy(1,2); display_char(0x02); display_char(' '); display_char(0x04); display_char(' '); display_char('B'); display_char('a'); display_char('c'); display_char('k'); return(0); } int beep_lf(int beep_l,int beep_f){ do{ P1OUT |= BIT7; // beeper = 1 delay_time(beep_f); P1OUT &= ~(BIT7); // beeper = 0 delay_time(beep_f); beep_l--; }while(beep_l != 0); return(0); }